package com.danco.training.zaneuskaya.service;

import java.util.List;

import com.danco.training.zaneuskaya.domain.Account;
import com.danco.training.zaneuskaya.domain.Education;
import com.danco.training.zaneuskaya.domain.Event;
import com.danco.training.zaneuskaya.domain.Forum;
import com.danco.training.zaneuskaya.domain.Interest;
import com.danco.training.zaneuskaya.domain.Job;
import com.danco.training.zaneuskaya.domain.Message;
import com.danco.training.zaneuskaya.domain.User;
import com.danco.training.zaneuskaya.service.exception.UserException;

/**
 * @author Zaneuskaya Aliaksandra
 *
 */
public interface UserService extends EntityService<User> {

	User getUserByAccount(Account account);

	List<User> getOnlineUserList();

	List<User> getOfflineUserList();

	List<User> getUserListByName(String firstName, String lastName);

	List<User> getFriends(User user);

	List<User> getEventMembers(Event event);

	List<User> getForumParticipants(Forum forum);

	boolean friendOf(User self, User user);

	void addFriend(User self, User user) throws UserException;

	void removeFriend(User self, User user) throws UserException;

	void enterEvent(User self, Event event);

	void leaveEvent(User self, Event event);

	void enterForum(User self, Forum forum);

	void leaveForum(User self, Forum forum) throws UserException;

	void addEducation(User self, Education education) throws UserException;

	void deleteEducation(User self, Education education) throws UserException;

	void addJob(User self, Job job) throws UserException;

	void removeJob(User self, Job job) throws UserException;

	void sendMessageToUser(User self, User user, Message message)
			throws UserException;

	void addInterest(User self, Interest interest) throws UserException;

	void removeInterest(User self, Interest interest) throws UserException;

}
